#include <esp_http_server.h>
#include <nvs_flash.h>
#include "esp_event.h"
#include "esp_netif.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

/***************************** */ /*
    依赖功能
*/ /****************************** */
extern void wifi_init_softap(void);
extern void wifi_uninit_softap(void);

extern httpd_handle_t start_webserver(void);
extern void stop_webserver(void);

extern int configIsOk();

extern int buttonInit(void);
extern void buttonTsak(void *arg);
//
extern void can_tcp_adapter_main(void);
//////////////////////////////////////


void app_main(void)
{
    /**************************************** */ /**
     * 这三项 是很重要的功能，多个地方都依赖，需要事先init
     */ /**************************************** */
    ESP_ERROR_CHECK(nvs_flash_init());
    ESP_ERROR_CHECK(esp_netif_init());
    ESP_ERROR_CHECK(esp_event_loop_create_default());

    // gpio
    buttonInit();   //无法在任务中初始化【会提示stack overflow】，原因不详;

    if (configIsOk() == 0) {
        //正常工作流程
        printf("can_tcp工作流程\n");
        xTaskCreatePinnedToCore(buttonTsak, "buttonTsak", 2048, NULL, 3, NULL,  tskNO_AFFINITY);
        can_tcp_adapter_main();
    } else {
        //配网工作流程
        printf("配网工作流程\n");

        wifi_init_softap();
        start_webserver();

        while (configIsOk() != 0) {
            vTaskDelay(pdMS_TO_TICKS(2000));
        }
        
        stop_webserver();
        wifi_uninit_softap();

        vTaskDelay(pdMS_TO_TICKS(5000));
        esp_restart();
    }
}
